Graphics Device Interface
WindowsXP中的一个子系统
GDI+是WindowsXP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口
基本介绍
GDI+是WindowsXP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口
顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,WindowsXP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。
作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。
新增功能
(1)渐变的画刷(GradientBrushes)
GDI+允许用户创建一个沿路径或直线渐变的画刷,来填充外形(shapes),路径(paths),区域(regions),渐变画刷同样也可以画直线、曲线、路径,当你用一个线形画刷填充一个外形(shapes)时,颜色就能够沿外形逐渐变化。
(2)基数样条函数(CardinalSplines)
GDI+支持基数样条函数,而GDI不支持。
基数样条是一组单个曲线按照一定的顺序连接而成的一条较大曲线。样条由一系列点指定,并通过每一个指定的点。由于基数样条平滑地穿过组中的每一个点(不出现尖角),因而它比用直线连接创建的路径更精确。下面是分别使用两种方法创建的图形,一个使用基数样条,一个使用直线。
(3)持久路径对象(PersistentPathObjects)
在GDI中,路径属于设备描述表(DC),画完后路径就会被破坏。在GDI+中,绘图工作由Graphics对象来完成,你可以创建几个与Graphics分开的路径对象,绘图操作时路径对象不被破环,这样你就可以多次使用同一个路径对象画路径了。
(4)变形和矩阵对象(Transformations&MatrixObject)
GDI+提供了矩阵对象,一个非常强大的工具,使得编写图形的旋转、平移、缩放代码变得非常容易。一个矩阵对象总是和一个图形变换对相联系起来,比方说,路径对象(PATH)有一个Transform方法,它的一个参数能够接受矩阵对象的地址,每次路径绘制时,它能够根据变换矩阵绘制。下面的图形是一个图形变换前后的例子,变换按照先缩放后旋转完成。
(5)可伸缩区域(ScalableRegions)
GDI+在区域(regions)方面对GDI进行了改进,在GDI中,Regions存储在设备坐标中,对Regions唯一可进行图形变换的操作就是对区域进行平移。而GDI+用世界坐标存储区域(Regions),允许对区域进行任何图形变换(譬如如图所示的缩放),图形变换以变换矩阵存储,下面例子是一个区域变换前后的例子(缩放、旋转、平移)
(6)AlphaBlending(混合)
你可能会注意到上面显示的图形,红色未平移区域与变换后区域有一部分交叉区域,这一部分形成的梦幻效果就是由GDI+支持的AlphaBlending(混合)实现的,利用alpha融合,你可以指定填充颜色的透明度,透明颜色与背景色相互融合,填充色越透明,背景色显示越清晰。
(7)多种图像格式支持.
图像在图形界面程序中占有举足轻重的地位,GDI+除了支持BMP等GDI支持的图形格式外,还支持JPEG(JointPhotographicExpertsGroup)、GIF(GraphicsInterchangeFormat)、PNG(ExchangeableImageFile)、TIFF(TagImageFileFormat)等图像格式,你可以直接在程序中使用这些图片文件,而无需考虑它们所用压缩算法。
(8)其它。
GDI+还将支持其它技术,譬如重新着色、颜色校正、元数据、图形容器,也许这些功能我们会在将来的WindowsXP或者MicrosoftVisualStudio。Net中看到.
3.编程模式的改变DeviceContexts(设备描述表),Handles(句柄),和GraphicsObjects(图形对象)
如果你曾经使用过GDI编写过应用程序,你肯定对设备描述表(DC)的概念非常熟悉,设备描述表是Windows使用的一个数据结构,用于存储具体设备能力和与如何在设备上重绘一些项目的有关属性信息。而且视频设备的设备描述表还与特定的窗口有关。首先你必须获得一个设备描述表句柄,然后在图形绘制时,你把这个句柄作为一个参数传递给GDI图形绘制函数。当然你也可以把它传递给获得或设置设备描述表有关属性的函数。
利用GDI+函数,你不必使用句柄或者设备描述表。相反,你可以简单地创建一个图形对象(Graphics),然后以你熟悉的面向对象的编程方式调用它的方法即可,譬如myGraphicsObject.DrawLine(parameters)。Graphics对象是GDI+的核心,正如设备描述表是GDI的核心一样,设备描述表(DC)和图形对象(Graphics)在不同的环境下扮演着同样的角色,发挥着类似的作用,但是两者也存在着这质的不同。前者使用基于句柄的编程方法而后者使用面向对象的编程方法。
图形对象和设备对象一样,与屏幕的显示窗口有关,它包含着与项目重绘有关的属性信息(譬如平滑度),然而图形对象并没有像GDI那样与Pen(画笔)、Path(路径)、Image(图像)、Font(字体)等搅在一起。在GDI中,所有与绘图有关的绘图对象必须选入指定设备描述表中(使用SelectObject函数),才能被指定的设备描述表所使用。而在GDI+中,你只需把这些绘图对象作为一个参数传递给图形对象Graphics方法调用即可,每一个图形对象所使用的绘图工具至于它调用方法使用的参数有关,它可以通过参数使用多种Pen和Brush绘图,而不是与特定的笔和画刷联系在一起。
GDI是GraphicsDeviceInterface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出
在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。
GDI是如何实现输出的
要想在屏幕或者其它输出设备上输出图形或者文字,那么我们就必须先获得一个称为设备描述表(DC:DeviceContext)的对象的句柄,以它为参数,调用各种GDI函数实现各种文字或图形的输出。
设备描述表是GDI内部保存数据的一种数据结构,此结构中的属性内容与特定的输出设备(显示器,打印机等)相关,属性定义了GDI函数的工作细节,在稍后我们将看到如何使用TextOut函数输出文字,在这里属性确定了文字的颜色,x坐标和y坐标映射到窗口显示区域的方式等。
设备描述表句柄一旦获得,那么系统将使用默认的属性值填充设备描述表结构。
如果有必要,我们可以使用一些GDI函数获取和改变设备描述表中的属性值。
图片漏洞
漏洞影响:
Microsoft产品中所使用的GDI+库(GdiPlus.dll)通过基于类的API提供对各种图形方式的访问。
GDI+库在解析特制的BMP文件时存在整数溢出漏洞,如果文件中包含有畸形的BitMapInfoHeader的话,就会导致错误的整数计算,最终触发可利用的内存破坏。
成功利用此漏洞的攻击者可完全控制受影响的系统。如果用户使用受影响的软件查看特制图像文件或浏览包含特制内容的网站,则这些漏洞可能允许远程执行代码。
攻击者可随后安装程序;查看、更改或删除数据;或者创建拥有完全用户权限的新帐户。那些帐户被配置为拥有较少系统用户权限的用户比具有管理用户权限的用户受到的影响要小。
受影响的图片格式
★我是第三方应用程序开发人员,我的应用程序使用gdiplus.dll。我的应用程序是否容易受到攻击,如何进行更新?
重新分发gdiplus.dll的开发人员应该确保他们通过下载本公告中提供的更新来更新随其应用程序安装的gdiplus.dll版本。鼓励开发人员按照使用共享组件的推荐最佳方案执行操作。有关使用共享组件的最佳做法的详细信息,请参阅关于独立应用程序的Microsoft知识库文章835322。
★我正在开发包含可重新分发文件gdiplus.dll的软件。应该怎样做?
您应该为您的开发软件安装本公告中提供的安全更新。如果已经随您的应用程序重新分发了gdiplus.dll,您应该使用为您的开发软件下载此安全更新时获得的此文件更新版本向您的客户发布您的应用程序的更新版本。
★如果第三方应用程序使用或安装受影响的gdiplus.dll组件,那么安装所有需要的Microsoft安全更新之后是否仍然容易受到攻击?
否,此安全更新替换并重新注册随操作系统提供的受影响的组件。如果第三方应用程序遵循建议的最佳方案,即将共享组件用作并列组件,那么它们也不会受到影响。如果第三方应用程序没有遵循推荐的最佳方案,而是随其应用程序一起重新分发了gdiplus.dll的旧版本,则客户可能受到威胁。Microsoft知识库文章954593也包含面向希望手动检查已注册的受影响OLE组件的说明。鼓励客户联系第三方解决方案开发商以获取其他信息。
微软GDI+图片漏洞360专用补丁包下载地址:
http://dl.360safe.com/360gdi_fix.exe
参考资料
最新修订时间:2023-12-24 19:12
目录
概述
基本介绍
参考资料